/**
 * 作者:c.k
 * 文件说明:
 * Creeated by c.k on 2018/1/17
 *
 */
import Main from '../views/Main.vue';

export default (data) => {
    // 结构创建
    for (let i = 0, j = data.length; i < j; i++) {
        if (data[i].childPowerInfos == null) {
            data[i].childPowerInfos = [{
                "childPowerInfos": [],
                "btnInfos": data[i].btnInfos,
                "powerId": data[i].powerId,
                "powerName": data[i].powerName,
                "routePath": data[i].routePath,
                "routeName": data[i].routeName,
                "routeComp": data[i].routeComp,
                "iconPath": data[i].iconPath
            }];
            data[i].routePath = data[i].routePath.split('-')[0];
            data[i].routeName = data[i].routeName.split('-')[0];
            data[i].routeComp = null;
        }else if(data[i].childPowerInfos.length == 1){
            data[i].powerName = data[i].childPowerInfos[0].powerName;
            data[i].iconPath = data[i].childPowerInfos[0].iconPath;
        }
    }
    // 这里之所以要重新遍历一下，是因为，通常我们动态路由的时候，是获取服务端数据，
    // 这个component属性是一个字符串，或者可能连字段名都是其他的key
    // 所以这里要做一些转换
    return generaMenu(data);
};

/**
 *  将登陆后返回的菜单目录结构转化为当前的所需要的目录结构
 * @param routers  转化后的菜单数组
 * @param data     菜单数据源
 */
function generaMenu(data) {
    // if (!data) {
        
    //     return;
    // }
    let routers = [];
    data.forEach(item => {
        let menu = {};
        menu.title = item.powerName;
        menu.icon = item.iconPath;
        menu.path = item.routePath;
        menu.name = item.routeName;
        if (item.routeComp) {
            menu.component = resolve => {
                require(['../views' + item.routeComp + '.vue'], resolve);
            };
        } else {
            menu.component = Main;
            if (item.routeName === 'home') {
                menu.children = [
                    {
                        path: '/home-index',
                        title: '首页',
                        name: 'home-index',
                        component: resolve => {
                            require(['../views/home/home.vue'], resolve);
                        }
                    }
                ];
            }
        }
        try {
            item.childPowerInfos.length
        } catch (e) {
        }
        if (item.childPowerInfos && item.childPowerInfos.length) {
            menu.children = generaMenu(item.childPowerInfos);
        }
        routers.push(menu);
    });
    return routers;
}
